package com.maosy.demo.fragment

import android.annotation.SuppressLint
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.findNavController
import com.maosy.demo.MyFlutterActivity
import com.maosy.demo.R
import com.maosy.demo.api.CmsApi
import com.maosy.demo.api.HttpRequest
import com.maosy.demo.api.ServerHost
import com.maosy.demo.fragment.vm.HomeVM
import com.maosy.demo.util.gson
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers


// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private const val ARG_PARAM1 = "param1"
private const val ARG_PARAM2 = "param2"

/**
 * A simple [Fragment] subclass.
 * Use the [HomeFragment.newInstance] factory method to
 * create an instance of this fragment.
 */
class HomeFragment : Fragment() {
    // TODO: Rename and change types of parameters
    private var param1: String? = null
    private var param2: String? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        arguments?.let {
            param1 = it.getString(ARG_PARAM1)
            param2 = it.getString(ARG_PARAM2)
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fragment_home, container, false)
    }

    private val homeVM: HomeVM by viewModels()

    @SuppressLint("CheckResult")
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        view.findViewById<Button>(R.id.btnGoWeb).apply {
            setOnClickListener {
                // 使用 Safe Args
                HomeFragmentDirections.actHomeToWeb().apply {
                    it.findNavController().navigate(this)
                }
            }
        }

        view.findViewById<Button>(R.id.btnGoFlutter).apply {
            setOnClickListener {
                MyFlutterActivity.start(
                    requireContext(),
                    MyFlutterActivity.CACHED_ENGINE_ID
                )
            }
        }

        view.findViewById<Button>(R.id.btnGoH5From).apply {
            setOnClickListener {
                // 使用 Safe Args
                HomeFragmentDirections.actHomeToWeb("http://192.168.1.3:5173/").apply {
                    it.findNavController().navigate(this)
                }
            }
        }

        view.findViewById<Button>(R.id.btnWebApiByRxJava).apply {
            setOnClickListener {
                HttpRequest.getApi<CmsApi>(ServerHost.BASE_HOST).banner()
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe {
                        Toast.makeText(
                            context,
                            "使用RxJava请求成功:${gson.toJson(it)}",
                            Toast.LENGTH_SHORT
                        )
                            .show()
                    }
            }
        }
    }

    companion object {
        /**
         * Use this factory method to create a new instance of
         * this fragment using the provided parameters.
         *
         * @param param1 Parameter 1.
         * @param param2 Parameter 2.
         * @return A new instance of fragment BlankFragment.
         */
        // TODO: Rename and change types and number of parameters
        @JvmStatic
        fun newInstance(param1: String, param2: String) =
            HomeFragment().apply {
                arguments = Bundle().apply {
                    putString(ARG_PARAM1, param1)
                    putString(ARG_PARAM2, param2)
                }
            }
    }
}